
package com.work.reports;

import java.util.Locale;

import com.work.pdf.PdfGenerator;

public class PdfInvoiceStatusGenerator extends PdfGenerator {

	public PdfInvoiceStatusGenerator(String pdfName, String pdfPath, Locale pdfLocale, String path) {
		super(pdfName, pdfPath, pdfLocale, path);
	}

	@Override
	public boolean generatePdf()
	{
		return false;
	}
	/*
		// Kolory tła poszczególnych elementów tabeli statusu faktury
		private static final Color tableHeaderBackgroundColor = new Color(184, 204, 228);
		private static final Color tableCellBackgroundColor = Color.WHITE;

		// Czcionki poszczególnych elementów tabeli statusu faktury
		private static final Font tableHeaderFont = PdfUtils.FONT_TIMES_11_BOLD_BLACK;
		private static final Font tableCellFont = PdfUtils.FONT_TIMES_11_NORMAL_BLACK;
		
		// Kolor obramowania tebeli statusu faktury
		//private static final PdfUtils.CellBorder tableBorderColor = new PdfUtils.CellBorder(Color.WHITE, Color.BLACK, Color.WHITE, Color.WHITE);
		private static final PdfUtils.CellBorder tableBorderColor = null;
		
		// Mapa zawierająca dane dla komórek tabeli ze statusem faktury. 
		private Map<String, List<String>> cellValuesMap = new HashMap<String, List<String>>();
		
		//Obiekt zawierający dane dla tabeli ze statusem faktury
		//PdfData data;
		
		public PdfInvoiceStatusGenerator(Locale pdfLocale, String pdfPath) {
			//super(createTitle(invoice), INVOICE_STATUS_DS_PATH, pdfLocale, pdfPath);
			//this.data = new PdfInvoiceData(this, invoice);
		}

		@Override
		public boolean generatePdf() {
			boolean generationResult = true;
			
			try {
				initCellsValues();
				
				// TODO dokończyć dodawanie numeru strony na dole
				PdfDecorator decorator = new PdfHeaderDecorator(document, writer);
				decorator.decorate();
				
				document.open();
				
				// tytuł dokumentu: Dokument podsumowujący dane o fakturze
				String titleText = message(DOKUMENT_PODSUMOWUJACY) + ": " + data.getInvoiceFieldValue(PolaFakturaEnum.NUMER.getValue());
				Chunk title = new Chunk(titleText, PdfUtils.FONT_TIMES_11_BOLD_BLACK);
				title.setUnderline(0.1f, -5f);
			    
				Paragraph titleParagraph = new Paragraph(title);
				titleParagraph.setAlignment(Element.ALIGN_CENTER);
				document.add(titleParagraph);
				
				// pusta linia
				document.add(new Paragraph(Chunk.NEWLINE));
				
				decorator = new PdfTableDecorator(document, 2, getSprawdzenieFormalneIRachnkoweCells());
				decorator.decorate();
				
				// pusta linia
				document.add(new Paragraph(Chunk.NEWLINE));
				
				decorator = new PdfTableDecorator(document, 2, getNazwaIndeksuWartoscIndeksuCells());
				decorator.decorate();
				
				// pusta linia
				document.add(new Paragraph(Chunk.NEWLINE));
				
				decorator = new PdfTableDecorator(document, 5, getOpisMerytorycznyCells());
				decorator.decorate();
				
				// pusta linia
				document.add(new Paragraph(Chunk.NEWLINE));
							
				decorator = new PdfTableDecorator(document, 3, getAkceptacjaCells());
				decorator.decorate();
			} catch (Exception e) {
				generationResult = false;
				IstDsLogger.error(this, "Błąd generowania PDF-a 'Status Faktury'. " + ExceptionUtils.getStackTrace(e));
			} finally {
				if (document != null && document.isOpen()) {
					document.close();
				}
			}
			
			return generationResult;
		}

		// Tworzenie tabeli: Sprawdzenie formalne i rachunkowe
		private List<PdfPCell> getSprawdzenieFormalneIRachnkoweCells() {
			List<PdfPCell> cells = new ArrayList<PdfPCell>();

			// Nagłówek: Sprawdzenie formalne i rachunkowe
			Paragraph cellValue = new Paragraph(message(SPRAWDZNIE_FORMALNE_RACHUNKOWE), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 2, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Etap
			addMapCellsPairToList(cells, ETAP);		
			
			// Data
			addMapCellsPairToList(cells, DATA);		
			
			// Użytkownik
			addMapCellsPairToList(cells, UZYTKOWNIK);		

			return cells;
		}
		
		// Tworzenie tabeli: Nazwa indeksu/Wartość indeksu
		private List<PdfPCell> getNazwaIndeksuWartoscIndeksuCells() {
			List<PdfPCell> cells = new ArrayList<PdfPCell>();
			
			// Nagłówek: Nazwa indeksu/Wartość indeksu
			Paragraph cellValue = new Paragraph(message(NAZWA__WARTOSC_INDEKSU), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 2, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Wartości poszczególnych pól faktury
			for(PolaFakturaEnum poleEnum : data.getListaPolFaktury()) {
				addMapCellsPairToList(cells, poleEnum.getValue());	
			}

			return cells;
		}

		// Tworzenie tabeli: Opis merytoryczny
		private List<PdfPCell> getOpisMerytorycznyCells() {
			List<PdfPCell> cells = new ArrayList<PdfPCell>();
			
			// Nagłówek: Opis merytoryczny
			Paragraph cellValue = new Paragraph(message(OPIS_MERYTORYCZNY), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 5, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Nagłówek dekretu: MPK
			cellValue = new Paragraph(MPK, tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 1, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Nagłówek dekretu: Product
			cellValue = new Paragraph(message(PRODUKT), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 1, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Nagłówek dekretu: Projekt/Partner/Idea
			cellValue = new Paragraph(message(PPI), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 1, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Nagłówek dekretu: Kwota brutto lini dekretacji
			cellValue = new Paragraph(message(KWOTA_LINI_DEKRETACJI), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 1, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Nagłówek dekretu: Informacje dla właściciela biznesowego
			cellValue = new Paragraph(message(INFO_DLA_WLASCICIELA), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 1, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));
			
			// Wartości poszczególnych pól faktury
			for(int i = 0; i < data.getListaDekretow().size(); i++) {
				addMapCellsPairToList(cells, DEKRET + i);	
			}

			return cells;
		}
		
		// Tworzenie tabeli: Akceptacja
		private List<PdfPCell> getAkceptacjaCells() {
			List<PdfPCell> cells = new ArrayList<PdfPCell>();
			
			// Nagłówek: Akceptacja
			Paragraph cellValue = new Paragraph(message(AKCEPTACJA), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 5, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Nagłówek akceptacji pojedynczego etapu: Etap
			cellValue = new Paragraph(message(ETAP), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 1, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Nagłówek akceptacji pojedynczego etapu: Data
			cellValue = new Paragraph(message(DATA), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 1, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Nagłówek akceptacji pojedynczego etapu: Użytkownik
			cellValue = new Paragraph(message(UZYTKOWNIK), tableHeaderFont);
			cells.add(PdfUtils.createPCell(cellValue, 1, tableHeaderBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));

			// Wartości akceptacji poszczególnych etapów
			for(int i = 0; i < data.getListaAkceptacjiEtapow().size(); i++) {
				addMapCellsPairToList(cells, ETAP + i);	
			}

			return cells;
		}

		private static String createTitle(DSObject invoice) {
			return TITLE_BEGIN_DOKUMENT_PODSUMOWUJACY + invoice.getHandle().toString();
		}
		
		private void initCellsValues() {
			// Dane dla wierszy tabeli: Sprawdzenie formalne i rachunkowe
			cellValuesMap.put(ETAP, PdfUtils.createRowData(message(ETAP), data.getEtapWeryfikacjaKsiegowa()));
			cellValuesMap.put(DATA, PdfUtils.createRowData(message(DATA), data.getDataWeryfikacjiKsiegowej()));
			cellValuesMap.put(UZYTKOWNIK, PdfUtils.createRowData(message(UZYTKOWNIK), data.getUzytkownikWeryfikacjiKsiegowej()));
			
			// Dane dla wierszy tabeli: Nazwa indeksu/Wartość indeksu
			for(PolaFakturaEnum poleEnum : data.getListaPolFaktury()) {
				cellValuesMap.put(poleEnum.getValue(), data.getInvoiceFieldLabelAndValue(poleEnum.getValue()));	
			}
			
			// Dane dla wierszy tabeli: Opis merytoryczny
			int i = 0;
			for(List<String> listaPolDekretu : data.getListaDekretow()) {
				cellValuesMap.put(DEKRET + i, listaPolDekretu);
				i++;
			}
			
			// Dane dla wierszy tabeli: Akceptacja
			i = 0;
			for(List<String> akceptacjaEtapu : data.getListaAkceptacjiEtapow()) {
				cellValuesMap.put(ETAP + i, akceptacjaEtapu);
				i++;
			}
		}
		
		private void addMapCellsPairToList(List<PdfPCell> cells, String pairKey) {
			if (cellValuesMap.containsKey(pairKey)) {
				List<String> cellsValues = cellValuesMap.get(pairKey);
				
				for (String cellValue : cellsValues) {
					Paragraph value = new Paragraph(cellValue, tableCellFont);
					cells.add(PdfUtils.createPCell(value, 1, tableCellBackgroundColor, tableBorderColor, Element.ALIGN_CENTER, Element.ALIGN_CENTER));
				}
			}
		}*/
}
